package com.hspedu.override_;

/**
 * @Author Stringzhua
 * @Date 2024/3/2 13:13
 * description:
 */
public class Dog extends Animal {
    //1.Dog是Animal的子类
    //2.Dog的cry方法和Animal的cry定义形式一样
    //3.这时就说Dog的cry方法,重写了父类的Animal的cry方法

    //    方法重写使用细节:细节1.子类的参数、方法名称,要和父类方法的参数,名称完全一样
//    public void cry1(){//方法名称不一致,不构成覆盖
//    public void cry(String name){//形参列表不一致,不构成覆盖
    public void cry() {
        System.out.println("修勾汪汪汪叫~");
    }


    //细节2.子类方法的返回类型和父类方法的返回类型一致
    //或者是父类返回类型的子类
    //如 父类的返回类型是Object
    //   子类的返回类型是String
    public String m1() {
        return null;
    }

    //如 父类的返回类型是String
    //   子类的返回类型是OObject 会报错
//    public Object m2(){
//        //'m2()' in 'com.hspedu.override_.Dog' clashes with 'm2()' in 'com.hspedu.override_.Animal'; attempting to use incompatible return type
//        return null;
//    }

    //这里Object不是String的子类,所以会报错
    //'m2()' in 'com.hspedu.override_.Dog' clashes with 'm2()' in 'com.hspedu.override_.Animal'; attempting to use incompatible return type
//    public Object m2(){
//        return null;
//    }

    public AAA m3() {
        return null;
    }

//    protected void eat() {//'eat()' in 'com.hspedu.override_.Dog' clashes with 'eat()' in 'com.hspedu.override_.Animal'; attempting to assign weaker access privileges ('protected'); was 'public'
    //细节3:子类方法不能缩小父类方法的访问权限
    //public->protected->默认->private
    public void eat() {
    }
}

class AAA {

}

class BBB extends AAA {

}
